package net.oschina.gitapp.common;

import static net.oschina.gitapp.common.Contanst.*;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.regex.Pattern;

import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.controller.UMServiceFactory;
import com.umeng.socialize.controller.UMSocialService;
import com.umeng.socialize.media.QQShareContent;
import com.umeng.socialize.media.SinaShareContent;
import com.umeng.socialize.media.UMImage;
import com.umeng.socialize.sso.SinaSsoHandler;
import com.umeng.socialize.sso.UMQQSsoHandler;
import com.umeng.socialize.weixin.controller.UMWXHandler;
import com.umeng.socialize.weixin.media.CircleShareContent;
import com.umeng.socialize.weixin.media.WeiXinShareContent;

import net.oschina.gitapp.AppContext;
import net.oschina.gitapp.AppException;
import net.oschina.gitapp.AppManager;
import net.oschina.gitapp.R;
import net.oschina.gitapp.api.ApiClient;
import net.oschina.gitapp.bean.Commit;
import net.oschina.gitapp.bean.CommitDiff;
import net.oschina.gitapp.bean.Event;
import net.oschina.gitapp.bean.Issue;
import net.oschina.gitapp.bean.Project;
import net.oschina.gitapp.bean.User;
import net.oschina.gitapp.ui.CodeFileDetailActivity;
import net.oschina.gitapp.ui.CommitDetailActivity;
import net.oschina.gitapp.ui.CommitFileDetailActivity;
import net.oschina.gitapp.ui.ImageZoomActivity;
import net.oschina.gitapp.ui.IssueDetailActivity;
import net.oschina.gitapp.ui.IssueEditActivity;
import net.oschina.gitapp.ui.LoginActivity;
import net.oschina.gitapp.ui.MainActivity;
import net.oschina.gitapp.ui.NotificationActivity;
import net.oschina.gitapp.ui.ProjectActivity;
import net.oschina.gitapp.ui.ProjectCodeActivity;
import net.oschina.gitapp.ui.ProjectSomeInfoListActivity;
import net.oschina.gitapp.ui.ProjectReadMeActivity;
import net.oschina.gitapp.ui.SearchActivity;
import net.oschina.gitapp.ui.MySelfInfoActivity;
import net.oschina.gitapp.ui.ShakeActivity;
import net.oschina.gitapp.ui.UserInfoActivity;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

/**
 * 应用程序UI工具包：封装UI相关的一些操作
 * 
 * @author liux (http://my.oschina.net/liux)
 * @version 1.0
 * @created 2012-3-21
 */
public class UIHelper {
    
    /** 表情图片匹配 */
    private static Pattern facePattern = Pattern
            .compile("\\[{1}([0-9]\\d*)\\]{1}");
    
    /** 全局web样式 */
    public final static String WEB_STYLE = "<style>* {font-size:14px;line-height:20px;} p {color:#333;} a {color:#3E62A6;} img {max-width:310px;} "
            + "img.alignleft {float:left;max-width:120px;margin:0 10px 5px 0;border:1px solid #ccc;background:#fff;padding:2px;} "
            + "a.tag {font-size:15px;text-decoration:none;background-color:#bbd6f3;border-bottom:2px solid #3E6D8E;border-right:2px solid #7F9FB6;color:#284a7b;margin:2px 2px 2px 0;padding:2px 4px;white-space:nowrap;}</style>";
    
    /**
     * 发送App异常崩溃报告
     * 
     * @param cont
     * @param crashReport
     */
    public static void sendAppCrashReport(final Context context,
            final String crashReport) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setIcon(android.R.drawable.ic_dialog_info);
        builder.setCancelable(false);
        builder.setTitle(R.string.app_error);
        builder.setMessage(R.string.app_error_message);
        builder.setPositiveButton(R.string.submit_report,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        // 发送异常报告
                        Intent i = new Intent(Intent.ACTION_SEND);
                        // i.setType("text/plain"); //模拟器
                        i.setType("message/rfc822"); // 真机
                        // 接收错误报告的邮箱地址
                        i.putExtra(Intent.EXTRA_EMAIL,
                                new String[] { "zhangdeyi@oschina.net" });
                        i.putExtra(Intent.EXTRA_SUBJECT,
                                "GIT@OSC,Android客户端 - 错误报告");
                        i.putExtra(Intent.EXTRA_TEXT, crashReport);
                        context.startActivity(Intent.createChooser(i, "发送错误报告"));
                        // 退出
                        AppManager.getAppManager().AppExit(context);
                    }
                });
        builder.setNegativeButton(R.string.sure,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        // 退出
                        AppManager.getAppManager().AppExit(context);
                    }
                });
        builder.show();
    }
    
    /**
     * 点击返回监听事件
     * 
     * @param activity
     * @return
     */
    public static View.OnClickListener finish(final Activity activity) {
        return new View.OnClickListener() {
            public void onClick(View v) {
                activity.finish();
            }
        };
    }
    
    /**
     * 弹出Toast消息
     * 
     * @param msg
     */
    public static void ToastMessage(Context cont, String msg) {
        Toast.makeText(cont, msg, Toast.LENGTH_SHORT).show();
    }
    
    public static void ToastMessage(Context cont, int msg) {
        Toast.makeText(cont, msg, Toast.LENGTH_SHORT).show();
    }
    
    public static void ToastMessage(Context cont, String msg, int time) {
        Toast.makeText(cont, msg, time).show();
    }
    
    public static AlertDialog.Builder getDialog(Context context, String title,
            String message, String... buttonStrs) {
        AlertDialog.Builder dialog = new Builder(context);
        dialog.setCancelable(false);
        dialog.setTitle(title);
        dialog.setMessage(message);
        dialog.setPositiveButton(buttonStrs[0],
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
        
        return dialog;
    }
    
    /**
     * 分析并组合动态的标题
     * 
     * @param author_name
     *            动态作者的名称
     * @param pAuthor_And_pName
     *            项目的作者和项目名
     * @param eventTitle
     *            事件的title（Issue或者pr或分支）
     * @return
     */
    public static SpannableString parseEventTitle(String author_name,
            String pAuthor_And_pName, Event event) {
        String title = "";
        String eventTitle = "";
        int action = event.getAction();
        switch (action) {
            case Event.EVENT_TYPE_CREATED:// 创建了issue
                eventTitle = event.getTarget_type() + getEventsTitle(event);
                title = "在项目 " + pAuthor_And_pName + " 创建了 " + eventTitle;
                break;
            case Event.EVENT_TYPE_UPDATED:// 更新项目
                title = "更新了项目 " + pAuthor_And_pName;
                break;
            case Event.EVENT_TYPE_CLOSED:// 关闭项目
                eventTitle = event.getTarget_type() + getEventsTitle(event);
                title = "关闭了项目 " + pAuthor_And_pName + " 的 " + eventTitle;
                break;
            case Event.EVENT_TYPE_REOPENED:// 重新打开了项目
                eventTitle = event.getTarget_type() + getEventsTitle(event);
                title = "重新打开了项目 " + pAuthor_And_pName + " 的 " + eventTitle;
                break;
            case Event.EVENT_TYPE_PUSHED:// push
                eventTitle = event
                        .getData()
                        .getRef()
                        .substring(
                                event.getData().getRef().lastIndexOf("/") + 1);
                title = "推送到了项目 " + pAuthor_And_pName + " 的 " + eventTitle
                        + " 分支";
                break;
            case Event.EVENT_TYPE_COMMENTED:// 评论
                if (event.getEvents().getIssue() != null) {
                    eventTitle = "Issues";
                }
                else if (event.getEvents().getPull_request() != null) {
                    eventTitle = "PullRequest";
                }
                eventTitle = eventTitle + getEventsTitle(event);
                title = "评论了项目 " + pAuthor_And_pName + " 的 " + eventTitle;
                break;
            case Event.EVENT_TYPE_MERGED:// 合并
                eventTitle = event.getTarget_type() + getEventsTitle(event);
                title = "接受了项目 " + pAuthor_And_pName + " 的 " + eventTitle;
                break;
            case Event.EVENT_TYPE_JOINED:// # User joined project
                title = "加入了项目 " + pAuthor_And_pName;
                break;
            case Event.EVENT_TYPE_LEFT:// # User left project
                title = "离开了项目 " + pAuthor_And_pName;
                break;
            case Event.EVENT_TYPE_FORKED:// fork了项目
                title = "Fork了项目 " + pAuthor_And_pName;
                break;
            default:
                title = "更新了动态：";
                break;
        }
        title = author_name + " " + title;
        SpannableString sps = new SpannableString(title);
        
        // 设置用户名字体大小、加粗、高亮
        sps.setSpan(new AbsoluteSizeSpan(14, true), 0, author_name.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        sps.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0,
                author_name.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        sps.setSpan(new ForegroundColorSpan(Color.parseColor("#0e5986")), 0,
                author_name.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        // 设置项目名字体大小和高亮
        int start = title.indexOf(pAuthor_And_pName);
        int end = start + pAuthor_And_pName.length();
        sps.setSpan(new AbsoluteSizeSpan(14, true), start, end,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        sps.setSpan(new ForegroundColorSpan(Color.parseColor("#0e5986")),
                start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        // 设置动态的title字体大小和高亮
        if (!StringUtils.isEmpty(eventTitle) && eventTitle != null) {
            start = title.indexOf(eventTitle);
            end = start + eventTitle.length();
            if (start > 0 && end > 0 && start < end) {
                sps.setSpan(new AbsoluteSizeSpan(14, true), start, end,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                sps.setSpan(
                        new ForegroundColorSpan(Color.parseColor("#0e5986")),
                        start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
        return sps;
    }
    
    private static String getEventsTitle(Event event) {
        String title = "";
        if (event.getEvents().getIssue() != null) {
            title = " #" + event.getEvents().getIssue().getIid();
        }
        
        if (event.getEvents().getPull_request() != null) {
            title = " #" + event.getEvents().getPull_request().getIid();
        }
        return title;
    }
    
    /**
     * 加载显示用户头像
     * 
     * @param imgFace
     * @param faceURL
     */
    public static void showUserFace(final ImageView imgFace,
            final String faceURL) {
        showLoadImage(imgFace, faceURL,
                imgFace.getContext().getString(R.string.msg_load_userface_fail));
    }
    
    /**
     * 加载显示图片
     * 
     * @param imgFace
     * @param faceURL
     * @param errMsg
     */
    public static void showLoadImage(final ImageView imgView,
            final String imgURL, final String errMsg) {
        // 读取本地图片
        if (StringUtils.isEmpty(imgURL) || imgURL.endsWith("portrait.gif")) {
            Bitmap bmp = BitmapFactory.decodeResource(imgView.getResources(),
                    R.drawable.mini_avatar);
            imgView.setImageBitmap(bmp);
            return;
        }
        
        // 是否有缓存图片
        final String filename = FileUtils.getFileName(imgURL);
        // Environment.getExternalStorageDirectory();返回/sdcard
        String filepath = imgView.getContext().getFilesDir() + File.separator
                + filename;
        File file = new File(filepath);
        if (file.exists()) {
            Bitmap bmp = ImageUtils.getBitmap(imgView.getContext(), filename);
            imgView.setImageBitmap(bmp);
            return;
        }
        
        // 从网络获取&写入图片缓存
        String _errMsg = imgView.getContext().getString(
                R.string.msg_load_image_fail);
        if (!StringUtils.isEmpty(errMsg))
            _errMsg = errMsg;
        final String ErrMsg = _errMsg;
        final Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                if (msg.what == 1 && msg.obj != null) {
                    imgView.setImageBitmap((Bitmap) msg.obj);
                    try {
                        // 写图片缓存
                        ImageUtils.saveImage(imgView.getContext(), filename,
                                (Bitmap) msg.obj);
                    }
                    catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                else {
                    ToastMessage(imgView.getContext(), ErrMsg);
                }
            }
        };
        new Thread() {
            public void run() {
                Message msg = new Message();
                try {
                    Bitmap bmp = ApiClient.getNetBitmap(imgURL);
                    msg.what = 1;
                    msg.obj = bmp;
                }
                catch (AppException e) {
                    e.printStackTrace();
                    msg.what = -1;
                    msg.obj = e;
                }
                handler.sendMessage(msg);
            }
        }.start();
    }
    
    /**
     * 清除app缓存
     * 
     * @param activity
     */
    public static void clearAppCache(Activity activity) {
        final AppContext ac = (AppContext) activity.getApplication();
        final Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                if (msg.what == 1) {
                    ToastMessage(ac, "缓存清除成功");
                }
                else {
                    ToastMessage(ac, "缓存清除失败");
                }
            }
        };
        new Thread() {
            public void run() {
                Message msg = new Message();
                try {
                    ac.clearAppCache();
                    msg.what = 1;
                }
                catch (Exception e) {
                    e.printStackTrace();
                    msg.what = -1;
                }
                handler.sendMessage(msg);
            }
        }.start();
    }
    
    /**
     * 显示登录的界面
     * 
     * @param context
     */
    public static void showLoginActivity(Context context) {
        Intent intent = new Intent(context, LoginActivity.class);
        context.startActivity(intent);
    }
    
    /**
     * 显示项目的详情
     * 
     * @param context
     * @param project
     * @param projectId
     */
    public static void showProjectDetail(Context context, Project project,
            String projectId) {
        Intent intent = new Intent(context, ProjectActivity.class);
        Bundle bundle = new Bundle();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        bundle.putSerializable(PROJECT, project);
        bundle.putString(PROJECTID, projectId);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 显示commit详情
     * 
     * @param context
     * @param project
     * @param commit
     */
    public static void showCommitDetail(Context context, Project project,
            Commit commit) {
        Intent intent = new Intent(context, CommitDetailActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Bundle bundle = new Bundle();
        bundle.putSerializable(Contanst.PROJECT, project);
        bundle.putSerializable(Contanst.COMMIT, commit);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 显示commit的Diff详情
     * 
     * @param context
     * @param project
     * @param commit
     * @param commitDiff
     */
    public static void showCommitDiffFileDetail(Context context,
            Project project, Commit commit, CommitDiff commitDiff) {
        Intent intent = new Intent(context, CommitFileDetailActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Bundle bundle = new Bundle();
        bundle.putSerializable(Contanst.PROJECT, project);
        bundle.putSerializable(Contanst.COMMIT, commit);
        bundle.putSerializable(Contanst.COMMITDIFF, commitDiff);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 显示issue的详情
     * 
     * @param context
     * @param project
     * @param issue
     */
    public static void showIssueDetail(Context context, Project project,
            Issue issue, String projectId, String issueId) {
        Intent intent = new Intent(context, IssueDetailActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Bundle bundle = new Bundle();
        bundle.putSerializable(Contanst.PROJECT, project);
        bundle.putSerializable(Contanst.ISSUE, issue);
        bundle.putString(Contanst.PROJECTID, projectId);
        bundle.putString(Contanst.ISSUEID, issueId);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 显示issue的编辑或者新增issue的界面
     * 
     * @param context
     * @param project
     * @param issue
     */
    public static void showIssueEditOrCreate(Context context, Project project,
            Issue issue) {
        Intent intent = new Intent(context, IssueEditActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Bundle bundle = new Bundle();
        bundle.putSerializable(Contanst.PROJECT, project);
        bundle.putSerializable(Contanst.ISSUE, issue);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 显示用户信息详情
     * 
     * @param context
     */
    public static void showMySelfInfoDetail(Context context) {
        Intent intent = new Intent(context, MySelfInfoActivity.class);
        context.startActivity(intent);
    }
    
    /**
     * 显示搜索界面
     * 
     * @param context
     */
    public static void showSearch(Context context) {
        Intent intent = new Intent(context, SearchActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }
    
    /**
     * 显示用户详情界面
     * 
     * @param context
     * @param user
     */
    public static void showUserInfoDetail(Context context, User user,
            String user_id) {
        Intent intent = new Intent(context, UserInfoActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Bundle bundle = new Bundle();
        bundle.putSerializable(Contanst.USER, user);
        bundle.putString(Contanst.USERID, user_id);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 点击动态显示动态详情
     * 
     * @param context
     * @param event
     */
    public static void showEventDetail(Context context, Event event) {
        if (event.getEvents().getIssue() != null) {
            showIssueDetail(context, null, null, event.getProject().getId(),
                    event.getEvents().getIssue().getId());
        }
        else {
            showProjectDetail(context, null, event.getProject().getId());
        }
    }
    
    // 查看代码文件详情
    public static void showCodeFileDetail(Context context, String path,
            String fileName, String ref, Project project) {
        Intent intent = new Intent(context, CodeFileDetailActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable(Contanst.PROJECT, project);
        bundle.putString("fileName", fileName);
        bundle.putString("path",
                path == null || StringUtils.isEmpty(path) ? fileName : path
                        + "/" + fileName);
        bundle.putString("ref", ref);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 显示项目的readme详情
     * 
     * @param context
     * @param project
     */
    public static void showProjectReadMeActivity(Context context,
            Project project) {
        Intent intent = new Intent(context, ProjectReadMeActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable(Contanst.PROJECT, project);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 显示项目的一些列表信息列表
     * 
     * @param context
     * @param project
     */
    public static void showProjectListActivity(Context context,
            Project project, int type) {
        Intent intent = new Intent(context, ProjectSomeInfoListActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable(Contanst.PROJECT, project);
        bundle.putInt("project_list_type", type);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 显示项目的代码列表
     * 
     * @param context
     * @param project
     */
    public static void showProjectCodeActivity(Context context, Project project) {
        Intent intent = new Intent(context, ProjectCodeActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable(Contanst.PROJECT, project);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 进入主界面
     * 
     * @param context
     */
    public static void goMainActivity(Context context) {
        Intent intent = new Intent(context, MainActivity.class);
        context.startActivity(intent);
    }
    
    /**
     * 显示图片查看界面
     * 
     * @param context
     * @param img_url
     */
    public static void showImageZoomActivity(Context context, String img_url) {
        Intent intent = new Intent(context, ImageZoomActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString(Contanst.IMG_URL, img_url);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }
    
    /**
     * 打开浏览器
     * 
     * @param context
     * @param url
     */
    public static void openBrowser(Context context, String url) {
        try {
            Uri uri = Uri.parse(url);
            Intent it = new Intent(Intent.ACTION_VIEW, uri);
            context.startActivity(it);
        }
        catch (Exception e) {
            e.printStackTrace();
            ToastMessage(context, "无法浏览此网页", 500);
        }
    }
    
    // 发送通知广播
    public static void sendBroadCast(Context context, int count) {
        if (!((AppContext) context.getApplicationContext()).isLogin()
                || count == 0)
            return;
        Intent intent = new Intent("net.oschina.gitapp.action.APPWIDGET_UPDATE");
        intent.putExtra("count", count);
        context.sendBroadcast(intent);
    }
    
    /**
     * 显示通知详情页面
     * 
     * @param context
     */
    public static void showNotificationDetail(Context context) {
        Intent intent = new Intent(context, NotificationActivity.class);
        context.startActivity(intent);
    }
    
    /**
     * 显示分享操作
     * 
     * @param context
     * @param shareContent
     * @param shareImage
     */
    public static void showShareOption(Activity context, String title,
            String url, String shareContent, Bitmap shareImage) {
        UMImage mUMImgBitmap = new UMImage(context, shareImage);
        // 首先在您的Activity中添加如下成员变量
        final UMSocialService mController = UMServiceFactory
                .getUMSocialService("com.umeng.share");
        
        // appID是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
        String appID = "wx850b854f6aad6764";
        // 添加微信平台
        UMWXHandler wxHandler = new UMWXHandler(context, appID);
        wxHandler.addToSocialSDK();
        // 设置分享到微信的内容
        WeiXinShareContent weixinContent = new WeiXinShareContent(mUMImgBitmap);
        weixinContent.setShareContent(shareContent);
        weixinContent.setTitle(title);
        weixinContent.setTargetUrl(url);
        weixinContent.setShareImage(mUMImgBitmap);
        wxHandler.mShareMedia = weixinContent;
        mController.setShareMedia(weixinContent);
        
        // 支持微信朋友圈
        UMWXHandler wxCircleHandler = new UMWXHandler(context, appID);
        // 设置朋友圈分享的内容
        CircleShareContent circleMedia = new CircleShareContent();
        circleMedia.setShareContent(shareContent);
        circleMedia.setShareImage(mUMImgBitmap);
        circleMedia.setTargetUrl(url);
        circleMedia.setTitle(title);
        wxCircleHandler.mShareMedia = circleMedia;
        mController.setShareMedia(circleMedia);
        wxCircleHandler.setToCircle(true);
        wxCircleHandler.addToSocialSDK();
        
        // 参数1为当前Activity，参数2为开发者在QQ互联申请的APP ID，参数3为开发者在QQ互联申请的APP kEY.
        UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(context, "1101982202",
                "GJxJGse5cu9iH4NM");
        QQShareContent qqShareContent = new QQShareContent();
        qqShareContent.setTitle(title);
        qqShareContent.setShareContent(shareContent);
        qqShareContent.setShareImage(mUMImgBitmap);
        qqShareContent.setTargetUrl(url);
        qqSsoHandler.mShareMedia = mUMImgBitmap;
        mController.setShareMedia(qqShareContent);
        qqSsoHandler.addToSocialSDK();
        
        SinaSsoHandler sinaSsoHandler = new SinaSsoHandler();
        SinaShareContent sinaShareContent = new SinaShareContent();
        String form = "  分享自GitOSC移动客户端，好项目尽在https://git.oschina.net";
        sinaShareContent.setShareContent(shareContent + " " + url + form);
        sinaShareContent.setTargetUrl(url);
        sinaShareContent.setShareImage(mUMImgBitmap);
        sinaShareContent.setTitle(title);
        mController.setShareMedia(sinaShareContent);
        mController.getConfig().setSsoHandler(sinaSsoHandler);
        // 移除人人分享操作
        mController.getConfig().removePlatform(SHARE_MEDIA.RENREN,
                SHARE_MEDIA.DOUBAN, SHARE_MEDIA.TENCENT);
        
        mController.openShare(context, false);
    }
    
    /**
     * 获得屏幕的截图
     * 
     * @param activity
     * 
     * @return
     */
    public static Bitmap takeScreenShot(Activity activity) {
        // View是你需要截图的View
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap b1 = view.getDrawingCache();
        // 图片允许最大空间 单位：KB
        double maxSize = 100.00;
        // 将bitmap放至数组中，意在bitmap的大小（与实际读取的原文件要大）
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        b1.compress(Bitmap.CompressFormat.JPEG, 70, baos);
        byte[] b = baos.toByteArray();
        // 将字节换成KB
        double mid = b.length / 1024;
        // 判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩
        if (mid > maxSize) {
            // 获取bitmap大小 是允许最大大小的多少倍
            double i = mid / maxSize;
            // 开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍
            // （1.保持刻度和高度和原bitmap比率一致，压缩后也达到了最大大小占用空间的大小）
            b1 = ImageUtils.zoomBitmap(b1, b1.getWidth() / Math.sqrt(i),
                    b1.getHeight() / Math.sqrt(i));
        }
        
        return b1;
    }
}
